linux驱动学习(七) ioctl中的cmd和

您所在的位置:网站首页 ior number是什么 linux驱动学习(七) ioctl中的cmd和

linux驱动学习(七) ioctl中的cmd和

2023-10-01 12:48| 来源: 网络整理| 查看: 265

以下部分内容来自互联网

在驱动程序里, ioctl() 函数传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值。cmd除了可区别数字外,还包含有助于处理的几种相应信息。

ioctl()的cmd可以通过使用宏_IO()得到,那么cmd到底是怎么组成的呢?

cmd的大小为 32位,共分 4 个域:

bit31~bit30 2位为 “区别读写” 区,作用是区分是读取命令还是写入命令。 bit29~bit15 14位为 "数据大小" 区,表示 ioctl() 中的 arg 变量传送的内存大小。 bit20~bit08  8位为 “魔数"(也称为"幻数")区,这个值用以与其它设备驱动程序的 ioctl 命令进行区别。 bit07~bit00   8位为 "区别序号" 区,是区分命令的命令顺序序号。 像命令码中的 “区分读写区” 里的值可能是 _IOC_NONE (0值)表示无数据传输,_IOC_READ (读), _IOC_WRITE (写) , _IOC_READ|_IOC_WRITE (双向)。 内核定义了 _IO() , _IOR() , IOW() 和 _IOWR() 这 4 个宏来辅助生成上面的 cmd 。下面分析 _IO() 的实现,其它的类似。 在 asm-generic/ioctl.h 里可以看到 _IO() 的定义: #define _IO(type,nr)        _IOC(_IOC_NONE,(type),(nr),0) 再看 _IOC() 的定义: #define _IOC(dir,type,nr,size) \ (((dir)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3